# [钛妹]:听说Python里有种叫集合的魔法口袋？它能帮我们解决列表里重复元素的烦恼吗？
# [钛妹]:今天咱们就来找找这个数据结构的妙用吧！
# [钛妹]:先来个灵魂拷问——如何快速揪出列表中的重复元素？

some_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']

# [钛哥]:传统方法要遍历整个列表，像侦探一样逐个排查
duplicates = []
for value in some_list:
    if some_list.count(value) > 1 and value not in duplicates:
        duplicates.append(value)
print(f'笨方法找到的重复项：{duplicates}')

# [钛哥]:现在见证集合的魔法！用set自带去重特性一招搞定
duplicates_set = set([x for x in some_list if some_list.count(x) > 1])
print(f'集合魔法找到的重复项：{duplicates_set}\n')

# [钛妹]:哇！这个集合还会变魔术！那它能帮我们比较不同集合的关系吗？
# [钛妹]:比如说找出两个颜色集合的共同爱好和独特喜好？

valid_colors = {'yellow', 'red', 'blue', 'green', 'black'}
input_colors = {'red', 'brown'}

# [钛哥]:当然！交集就像找共同好友，差集就像找独门绝技
print('颜色交集（共同喜欢的颜色）：')
print(valid_colors.intersection(input_colors))

print('\n颜色差集（独特喜欢的颜色）：')
print(input_colors.difference(valid_colors))

# [钛妹]:原来集合还能这么玩！创建集合有什么要注意的小细节吗？

# [钛哥]:注意啦！创建空集合要用set()，带元素的可以用花括号
empty_set = set()
colors = {'red', 'blue', 'green'}

print(f'\n空集合类型：{type(empty_set)}')
print(f'颜色集合类型：{type(colors)}')

# [钛妹]:那集合和列表最大的区别是什么呀？

# [钛哥]:三大核心区别记牢咯：
# 1.元素唯一性：集合自动去重，列表允许重复
# 2.无序性：集合没有顺序，列表有明确索引
# 3.查询效率：集合查找速度O(1)，列表是O(n)

# [钛哥]:最后敲黑板划重点啦！
print('\n=== 知识要点总结 ===')
print('1. 集合是自带去重功能的无序数据容器')
print('2. 交集intersection()找共同元素')
print('3. 差集difference()找独特元素')
print('4. 创建空集合必须使用set()')

# [钛哥]:学习是防止老年痴呆的最好办法！
# [钛哥]:日积月累！点滴进步！点赞关注不迷路！
print('\n学习是防止老年痴呆的最好办法！日积月累！点滴进步！点赞关注不迷路！')